iT邦幫忙

2026 iThome 鐵人賽

DAY 19
0
自我挑戰組

30 天養大一個開源專案:baodao-skill 從零開始系列 第 19 篇

【Day 19】免 key 的官方「預測」:中油 open data 週日中午就把下週油價寫死,95 無鉛 32.7 元

  • 分享至 

  • xImage
  •  

先講結論:taiwan-oil-price 抓中油官方 open data,免金鑰、免登入。最妙的是它的時間設計——中油每週日中午公告次週牌價、週一零時生效,所以週日下午去查,JSON 裡的牌價生效日期已經是明天,你拿到的不是預測,是公告過的確定值。想回答「下週油價漲還是跌」,不用等名嘴,等 JSON。

一個 JSON,八種單位

端點是 vipmbr.cpc.com.tw/opendata/sixtypeoillistprice,data.gov.tw 資料集 166537。2026-09-26 實測:HTTP 200、17,519 bytes、51 列,連瀏覽器 UA 都不用裝。51 列涵蓋八個型別:汽柴油零售、燃料油、天然氣、液化石油氣、國內外航空燃油……篩 型別名稱=="汽柴油零售" 剩 7 列,其中 5 列是加油站牌價(98=34.7、95=32.7、92=31.2、酒精汽油=32.7、超級柴油=29.9 元/公升),另外兩列是海運輕/重柴油——單位是元/公秉,29,900 元。看錯單位會以為柴油一公升兩萬九,嚇死自己。回報時 計價單位 欄位一定要一起帶。

實測:今天的牌價與七週歷史

2026-09-26(週六)實測,生效日期 1150921(= 2026-09-21,本週):

調價週 92 無鉛 95 無鉛 98 無鉛 超級柴油
115/09/21 31.2 32.7 34.7 29.9
115/09/14 31.2 32.7 34.7 29.9
115/09/07 30.5 32.0 34.0 29.3
115/08/31 30.5 32.0 34.0 29.3
115/08/24 30.5 32.0 34.0 29.3
115/08/17 30.5 32.0 34.0 29.3
115/08/10 30.5 32.0 34.0 29.3

(元/公升)七週只有兩個價位:凍漲一個多月後,9/14 漲 0.7 元,9/21 持平。歷史來源是官網歷史油價頁(cpc.com.tw/historyprice.aspx?n=2890,要帶瀏覽器 UA),與 open data 對得上。

jq 的中文欄位陷阱

今天的實測還踩到一個小雷:欄位是中文,jq 的點語法直接噴錯——jq: error: try .["field"] instead of .field for unusually named fields。解法照它說的:

jq -r '.[] | select(.["型別名稱"]=="汽柴油零售") | "\(.["產品名稱"]) \(.["參考牌價_金額"]) \(.["計價單位"]) \(.["牌價生效日期"])"' /tmp/oil.json

中文資料源配 CLI 工具,中括號語法是日常。

生效日期怎麼讀

回報時寫清楚生效日,因為「你查到的是哪一週」取決於查的時間點:週六查是 1150921(本週,已生效);週日中午公告後到半夜查,生效日期已經翻成下週一,但還沒生效——本週仍沿用舊價,公告值是「確定的下週」。民國年 +1911 換西元。這個設計讓 skill 不用做任何預測模型:官方替你公告了。

錯誤處理(寫進 SKILL 的規矩)

  • open data 掛了(5xx/逾時/非 JSON):退回歷史油價頁解析第一列;兩路都失敗就如實回報資料源異常,不編數字。
  • 歷史頁只列近 7 週,更早要分頁 POST(範圍外,如實說明);CPC 改版讓表格解析失敗時也如實回報。
  • 台塑石化另有一套牌價(通常差 0.1 元),用戶指名台塑時說明資料源是中油。
  • 同一 JSON 還有燃料油、天然氣、液化石油氣,單位各異(公升/公秉/立方公尺),篩型別、帶單位。

第 19 天。有些「預測」問題的答案不是模型,是時間:官方週日中午把下週寫死,你只要讀對生效日期。


上一篇
【Day 18】14.7MB 的實價登錄:下一季回 200 但不是 zip,這一季的中山區一坪 91.9 萬
下一篇
【Day 20】0.8.2:發票會讀錯號碼、停車場每天長大,然後我們把地雷寫成了制度
系列文
30 天養大一個開源專案:baodao-skill 從零開始 共 24 篇
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言